// #include <stdio.h>
// #include <stdlib.h>
// #include <Windows.h>
// #include <stdbool.h>
//
// typedef int ElemType;
// // 节点结构
// typedef struct Node {
//     ElemType data;
//     struct Node* next;
// } Node;
//
// // 链表结构
// typedef struct LinkedList {
//     Node* head;  // 头结点
// } LinkedList;
//
// // 创建链表并初始化
// LinkedList* create_list() {
//     LinkedList* list = (LinkedList*)malloc(sizeof(LinkedList));
//     list->head = (Node*)malloc(sizeof(Node)); // 创建头结点
//     list->head->next = NULL;  // 初始化头结点的下一个指针
//     return list;
// }
//
// // 判断链表是否为空
// int is_empty(LinkedList* list) {
//     return list->head->next == NULL;
// }
//
// // 尾插法插入
// void insert_at_tail(LinkedList* list, ElemType data) {
//     Node* new_node = (Node*)malloc(sizeof(Node));
//     new_node->data = data;
//     new_node->next = NULL; // 新节点的下一个指针指向 NULL
//
//     Node* current = list->head;
//     while (current->next != NULL) {
//         current = current->next; // 找到最后一个节点
//     }
//     current->next = new_node; // 将新节点插入到链表末尾
// }
//
// // 显示链表内容
// void display(LinkedList* list) {
//     Node* current = list->head->next;
//     printf("链表内容: ");
//     while (current != NULL) {
//         printf("%d ", current->data);
//         current = current->next;
//     }
//     printf("\n");
// }
//
// // 释放链表内存
// void free_list(LinkedList* list) {
//     Node* current = list->head;
//     Node* next_node;
//     while (current != NULL) {
//         next_node = current->next;
//         free(current);
//         current = next_node;
//     }
// }
//
// void DeleteAbsSame(LinkedList* L) {
//     if(L==NULL||L->head==NULL) {
//         return;
//     }
//     //时间换空间
//     int arr[10001]={false};
//     Node* prev=L->head;
//     Node* p=L->head->next;
//     while (p!=NULL) {
//         int value=abs(p->data);
//         if(arr[value]) {
//            Node* tmp=p;
//             p=p->next;
//             prev->next=p;
//             free(tmp);
//         }else {
//             arr[value]=true;
//             prev=p;
//             p=p->next;
//         }
//     }
// }
//
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     LinkedList* L=create_list();
//     insert_at_tail(L,10);
//     insert_at_tail(L,29);
//     insert_at_tail(L,3);
//     insert_at_tail(L,-10);
//     insert_at_tail(L,40);
//     insert_at_tail(L,-20);
//     insert_at_tail(L,-40);
//     insert_at_tail(L,20);
//     display(L);
//     DeleteAbsSame(L);
//     display(L);
//     free_list(L);
//     return 0;
// }